/**
 * Copyright (c) 2014 All Rights Reserved by the SDL Group.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.sdl.odata.service.actor

import com.sdl.odata.service.protocol.ODataActorMessage

object MessageHandlerRegistry {
  private val registry = scala.collection.concurrent.TrieMap[Class[_ <: ODataActorMessage], Set[String]]()

  def contains(messageType: Class[_ <: ODataActorMessage]): Boolean = registry.contains(messageType)

  def get(messageType: Class[_ <: ODataActorMessage]): Set[String] = registry(messageType)

  def add(messageType: Class[_ <: ODataActorMessage], beanName: String): Unit = {
    if (!registry.contains(messageType)) {
      registry(messageType) = Set[String]()
    }

    registry(messageType) = registry(messageType) + beanName
  }

  def remove(messageType: Class[_ <: ODataActorMessage], beanName: String): Unit = {
    if (registry.contains(messageType)) {
      registry(messageType) = registry(messageType) - beanName
    }
  }
}
